/**************************************************************************//**
 * @item     CosyOS-III Config
 * @file     mcucfg_cm3.h
 * @brief    CMSIS Cortex-M Core Config File
 * @author   迟凯峰
 * @version  V1.2.0
 * @date     2025.03.30
 ******************************************************************************/

#ifndef __MCUCFG_CM3_H
#define __MCUCFG_CM3_H

#include "mcucfg_cmx.h"
#if MCUCFG_SYSINT == 3

////////////////////////////////////////////////////////////////////////////////

// 如果在 mcucfg_cmx.h 中，系统中断配置为 SysTick_Handler + PendSV_Handler，
// 用户需配置下方的用户定义项。

//////////////////////////////////* 用户定义 *//////////////////////////////////

/* 系统滴答-配置方式 */
// <0=> 手动配置 <1=> 自动配置
// 手动配置：您需自行手动配置和系统滴答有关的一切事宜；
// 例外的是，滴答中断优先级将由CosyOS自动配置为最低级。
// 自动配置：CosyOS会自动为您处理好一切事宜，开箱即用。
#define MCUCFG_SYSTICK_AUTOCONFIG       1

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#if MCUCFG_SYSTICK_AUTOCONFIG == 1
/* 自动配置-额外配置 */
// 如果系统滴答配置方式为自动配置，需额外配置下方定义项。

// 系统时钟频率
// 告知CosyOS您所配置的系统时钟，单位为兆赫（MHZ）。
#define MCUCFG_SYSCLK                   168

// 系统滴答时钟源
// <0=> 外部时钟 <1=> 内核时钟
// 在此配置系统滴答时钟源，您无需再额外配置。
#define MCUCFG_SYSTICK_CLKSOURCE        1

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#else
/* 手动配置-额外配置 */
// 如果系统滴答配置方式为手动配置，用户仍需额外配置下方定义项，
// 用于 CosyOS-任务管理器 的CPU使用率统计、滴答时间统计等功能。
// 当然，如果您不打算使用 CosyOS-任务管理器，可不用配置。
// 默认配置仅为示例，给用户以参考和提示。

// 系统滴答-计数方式
// <1=> 从零向上计数至重装载值溢出 <2=> 从重装载值向下计数至零溢出
// <3=> 从重装载值向上计数至零溢出 <4=> 从零向下计数至重装载值溢出
// 告知CosyOS您所配置的定时器计数方式。
#define MCUCFG_SYSTICK_COUNTMODE        2

// 系统滴答-位数
// 如果定时器计数方式配置为3或4，应正确配置该定义。
#define MCUCFG_SYSTICK_BITS             24

// 系统滴答-当前值
// 应配置为可读的当前值寄存器。
#define MCUCFG_SYSTICK_CURRVALUE        (SysTick->VAL)

// 系统滴答-重装载值
// 如果该值为常量可配置为常量，否则应配置为可读的重装载值寄存器。
#define MCUCFG_SYSTICK_LOADVALUE        (SysTick->LOAD)

// 系统滴答-时钟
// 告知CosyOS您所配置的系统滴答时钟，单位为兆赫（MHZ）。
#define MCUCFG_SYSTICK_CLK              (系统时钟 / ((SysTick->CTRL & 4) ? 1 : 8))

#endif

//////////////////////////////////* 系统定义 *//////////////////////////////////

// 以下为系统定义，用户不可随意修改。

#define OS_PendSV_Handler  PendSV_Handler

////////////////////////////////////////////////////////////////////////////////

#endif
#endif
